package com.abm;


import java.util.ArrayList;
import com.abm.data.DatabaseManager;
import com.abm.entity.Actividad;
import com.abm.entity.Util;
import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.database.SQLException;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Actividad {
	private static final String TAGS = null;
	private GridView grdOpciones;
	private ArrayList<MenuItems> arrListItems;
	private Context mContext;
	public int NOTIFICATION = android.R.string.yes;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//seteamos la vista del Activity con el XML "activity_main.xml"
		setContentView(R.layout.activity_main);
		//creamos una referencia al objeto seteado en el XML "gridopciones" para hacer referencia desde nuestro código.
		grdOpciones = (GridView) findViewById(R.id.gridopciones);
		// creo una referencia del contexto de la aplicación.
		mContext = getApplicationContext();
		//creamos una referencia a la propiedad estática "nNM" del notification manager.
//		Actividad.mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//		//mostramos la notificación.
//		showNotification();
		

		//creamos al referencia a un nuevo arreglo de MenuItems
		arrListItems = new ArrayList<MenuItems>();
		//guardamos en el arreglo de Strings los valores de los strings que queremos que se muestren
		final String titulos[] = { 
				getString(R.string.products),
				getString(R.string.title_activity_client),
				getString(R.string.categories), 
				getString(R.string.product_log),
				getString(R.string.rest),
				getString(R.string.about) 
		};

		//creamos un objeto de tipo menuItems vacío, donde guardaremos los objetos con los valores correspoionManager) getSystemService(NOTIFICATION_SERVICE);ero acepndientes
		MenuItems mitem = new MenuItems("", "");
		
		//iteramos la cantidad de objetos que tenemos en el arreglo "titulos"
		for (int x = 0; x < titulos.length; x++) {
			//creamos un nuevo menuItems seteandole el título con el valor del arreglo "titulo" en la posición x
			mitem = new MenuItems("", titulos[x]);
			//agregamos dicho item al arreglo de Items
			arrListItems.add(mitem);

		}
		//seteamos el adapter (o sea, la manera de mostrar los "rows" previamente definidos en el mainActivity).
		grdOpciones.setAdapter(new AdaptadorTitulares(this, arrListItems));

		//seteamos el clickItemListener del objeto de tipo GridView
		grdOpciones.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v,
					int position, long id) {

				try {
					//mostramos por pantalla el contenido del arrayList en la posición "position", o sea, la posición referente al valor
					//que nos devuelve la posición del row clickeado.
					Toast.makeText(mContext,
							arrListItems.get(position).getTitulo(),
							Toast.LENGTH_SHORT).show();
					// si el valor del contenido del XML "Strings" referente al contenido del valor "products" es igual
					// al valor del contenido en la posición del arrayList "position", o sea, en la posición referente donde hemos
					//hecho click en el GridView
					if (getString(R.string.products) == arrListItems.get(position).getTitulo()) {
						Intent intent = new Intent();
						intent.setClass(mContext, ProductActivity.class);
						startActivity(intent);
					}
					
					if (getString(R.string.title_activity_client) == arrListItems.get(position).getTitulo()) {
						Intent intent = new Intent();
						intent.setClass(mContext, ClientActivity.class);
						startActivity(intent);
					}
					
					if (getString(R.string.categories) == arrListItems.get(position).getTitulo()) {
						Intent intent = new Intent();
						intent.setClass(mContext, CategoryActivity.class);
						startActivity(intent);
					}
					
					if (getString(R.string.product_log) == arrListItems.get(position).getTitulo()) {
						Intent intent = new Intent();
						intent.setClass(mContext, ProductLogActivity.class);
						startActivity(intent);
					}
					
					if (getString(R.string.rest) == arrListItems.get(position).getTitulo()) {
						Intent intent = new Intent();
						intent.setClass(mContext, AskIdActivity.class);
						startActivity(intent);
					}
					
					if (getString(R.string.about) == arrListItems.get(position).getTitulo()) {
						Intent intent = new Intent();
						intent.setClass(mContext, AboutActivity.class);
						startActivity(intent);
					}

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});

		try {

			DatabaseManager.init(mContext);
			Util.init(mContext);

		} catch (SQLException e) {
			Log.e(TAGS, "Database exception", e);
			return;
		}

		showNotificatrion();
	}

	private static final int NOTIF_ALERTA_ID = 1;
	public void showNotificatrion(){
		NotificationCompat.Builder mBuilder =
		        new NotificationCompat.Builder(MainActivity.this)
		        .setSmallIcon(android.R.drawable.stat_sys_warning)
		        .setLargeIcon((((BitmapDrawable)getResources()
		        		.getDrawable(R.drawable.ic_launcher)).getBitmap()))
		        .setContentTitle("Quick product")
		        .setContentText("Add new product.")
		        .setContentInfo("4")
		        .setTicker("Click here to add a new product");

		Intent notIntent = 
				new Intent(MainActivity.this, AddProductActivity.class);
		
		PendingIntent contIntent = PendingIntent.getActivity(
				MainActivity.this, 0, notIntent, 0);
		
		mBuilder.setContentIntent(contIntent);
		
		NotificationManager mNotificationManager =
		    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

		mNotificationManager.notify(NOTIF_ALERTA_ID, mBuilder.build());
	}
	
	
	
	
	
	
	public class AdaptadorTitulares extends BaseAdapter {
		//creamos una propiedad de tipo Activity..........
		Activity context;
		//arreglo de MenuItems (Clase que creamos nosotros que representa cada item que veremos en la pantalla).
		private ArrayList<MenuItems> arrayListMenuItems;

		//seteamos un constructor de la clase, donde le daremos como parametro un Activity (en la cual setearemos el contexto) y un arreglo
		//con un arreglo de items a mostrar en la misma.
		AdaptadorTitulares(Activity context,
				ArrayList<MenuItems> arrayListMenuItems) {
			this.context = context;
			this.arrayListMenuItems = arrayListMenuItems;
		}

//		 seteamos el método getView( el cual muestra l ainformacion en la posición especificada), que será llamado cada vez que haya 
//		que actualizar un row.
//		 position: representa la posición del item dentro del adaptador que será posicionado/mostrado.
//		 convertView: representa la "vista antigua" antes de ser "actualizada". Si no es null, crearemos la "vista nueva" actualizada con los datos correspondietes.
//		 parent: The parent that this view will eventually be attached to
//		 Retorna una vista correspondiente a la información correspondiente en la  posición especificada.

		public View getView(int position, View convertView, ViewGroup parent) {
			LayoutInflater inflater = (LayoutInflater) context
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			View gridView;
			//si la vista no está creada...
			if (convertView == null) {
				//creamos un Activity
				gridView = new View(context);
				//seteamos el inflater con el XML donde hemos definido el "row" que vamos a mostrar en el gridView.
				gridView = inflater.inflate(R.layout.iconrow, null);
				//creamos un objeto de tipo TextView asociado al del XML perteneciente a R.layout.iconrow. Ahora podremos hacer referencia
				//a dicho objeto desde el código Java.
				TextView textView = (TextView) gridView	.findViewById(R.id.iconrow_title);
				//seteamos el textView previamente creado con el valor del arreglo de Items, en su posición "position". De esta manera
				//tomamos el texto de dicho arreglo con correspondencia a la posición del row que seleccionemos.
				textView.setText(arrayListMenuItems.get(position).getTitulo());
				//creamos una propiedad de tipo Drawable donde guardaremos los gráficos correspondientes a los íconos a mostrar.
				Drawable iconDrawable = null;
				//si el String del producto (o sea el String seteado en el XML) es igual al título en la posición del arreglo "arrayListMenuItem" correspondiente
				//al "row" seleccionado...
				if (getString(R.string.products) == arrayListMenuItems.get(
						position).getTitulo()) {
					iconDrawable = context.getResources().getDrawable(
							R.drawable.products_on);
				}
				
				if (getString(R.string.title_activity_client) == arrayListMenuItems.get(
						position).getTitulo()) {
					iconDrawable = context.getResources().getDrawable(
							R.drawable.products_on);
				}
				
				if (getString(R.string.categories) == arrayListMenuItems.get(
						position).getTitulo()) {
					iconDrawable = context.getResources().getDrawable(
							R.drawable.products_on);
				}
				
				if (getString(R.string.product_log) == arrayListMenuItems.get(
						position).getTitulo()) {
					iconDrawable = context.getResources().getDrawable(
							R.drawable.products_on);
				}
				
				if (getString(R.string.rest) == arrayListMenuItems.get(
						position).getTitulo()) {
					iconDrawable = context.getResources().getDrawable(
							R.drawable.products_on);
				}
				
				if (getString(R.string.about) == arrayListMenuItems.get(
						position).getTitulo()) {
					iconDrawable = context.getResources().getDrawable(
							R.drawable.products_on);
				}
				
				//creo un objeto de tipo ImageView que hará referencia al "imageView" del "iconrow_icon" del XML
				//Recordemos que manteniendo control+botón izquiero del mouse sobre dicho objeto, podremos ver
				//la referencia al XML.
				ImageView imageView = (ImageView) gridView
						.findViewById(R.id.iconrow_icon);
				//seteo dichi imageView con el ícono previamente creado
				imageView.setImageDrawable(iconDrawable);
			} else {
				//si no... seteo la vista con la vista "antigua"... para que no haya cambios.
				gridView = (View) convertView;
			}
			//retorno el objeto gridView para setear los cambios, si es que los hubo, o dejar la vista con los mismos objetos visuales
			return gridView;
		}

		@Override
		public int getCount() {
			return arrayListMenuItems.size();
		}

		@Override
		public Object getItem(int position) {
			return null;
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return 0;
		}
	}

	//Clase donde guardaré los objetos visuales para que el usuario seleccione los items.
	class MenuItems {
		String icono;
		String titulo;

		public MenuItems(String icono, String titulo) {
			super();
			this.icono = icono;
			this.titulo = titulo;
		}

		public String getIcono() {
			return icono;
		}

		public void setIcono(String icono) {
			this.icono = icono;
		}

		public String getTitulo() {
			return titulo;
		}

		public void setTitulo(String titulo) {
			this.titulo = titulo;
		}

	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			viewExit();
		}
		return false;
	}

//	@SuppressWarnings("deprecation")
//	public void showNotification() {
//		try {
//			String titulo = getString(R.string.ventas_).toString();
//			String Descripcion = getString(R.string.tap_to_open);
//
//			Intent intent = new Intent();
//			intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
//			intent.setClass(getApplicationContext(), MainActivity.class);
//
//			PendingIntent contentIntent = PendingIntent.getActivity(
//					getApplicationContext(), 0, intent, 0);
//			Notification notification = new Notification(
//					R.drawable.products_on, titulo, System.currentTimeMillis());
//
//			notification.flags |= Notification.FLAG_ONGOING_EVENT;
//			notification.setLatestEventInfo(this, titulo, Descripcion,
//					contentIntent);
//			Actividad.mNM.notify(NOTIFICATION, notification);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//	}
}
